package com.hmdp.utils;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created with IntelliJ IDEA.
 * Description:  登陆校验拦截器
 * User: sfx
 * Date: 2023-01-25
 * Time: 15:57
 */

public class LoginInterceptor implements HandlerInterceptor {
    /**
     * 前置拦截 : 是在controller执行之前进行登陆校验.
     * 在登陆的情况下,发出的请求,就会被拦截. 其他的不需要拦截
     * 最后再将用户登陆状态的信息保存到ThreadLocal,既防止多线程并发导致线程安全问题,
     * 又保证了controller想要拿到用户信息,去ThreadLocal里面去取就行了
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //进行拦截(ThreadLocal里面有没有用户)->来判断有没有用户登陆
        if (UserHolder.getUser() == null) {
            response.setStatus(401);
            return false;
        }
        return true;
    }

    /**
     * 该方法在视图渲染结束后执行，可以通过此方法实现资源清理、记录日志信息等工作。
     * 进行销毁该用户(该用户登陆状态信息),防止内存泄漏.
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        UserHolder.removeUser();
    }
}